module.exports = {
  printWidth: 100,
  tabWidth: 2,
  useTabs: false,
  semi: true, // 语句末尾添加分号
  singleQuote: true, // 使用单引号而不是双引号
  quoteProps: 'as-needed', // 对象属性仅在需要时加引号
  jsxSingleQuote: true, // JSX 中使用单引号
  trailingComma: 'es5', // 在 ES5 中有效的地方添加尾随逗号
  bracketSpacing: true, // 对象字面量的括号之间加空格 { foo: bar }
  bracketSameLine: false, // 多行 JSX 元素的 > 放在新行
  arrowParens: 'always', // 箭头函数参数总是加括号 (x) => x
  endOfLine: 'lf', // 换行符使用 lf（Unix）
  requirePragma: false, // 不要求文件顶部有特殊注释才格式化
  insertPragma: false, // 不在文件顶部插入 @format 标记
  embeddedLanguageFormatting: 'auto', // 自动格式化嵌入的代码
  singleAttributePerLine: false, // HTML/JSX 中每个属性不强制独占一行

  overrides: [
    // ------------------------------------------------------------
    // 前端相关文件
    // ------------------------------------------------------------
    {
      files: ['*.{js,jsx,ts,tsx,mjs,cjs}'], // JavaScript/TypeScript
      options: {
        printWidth: 100,
        tabWidth: 2,
      },
    },

    {
      files: ['*.vue'], // Vue 单文件组件
      options: {
        parser: 'vue', // 使用 Vue 解析器
        printWidth: 100,
        tabWidth: 2,
        vueIndentScriptAndStyle: false, // script 和 style 标签内容不额外缩进
        htmlWhitespaceSensitivity: 'css', // HTML 空格敏感度

        plugins: [
          'prettier-plugin-tailwindcss',
          'prettier-plugin-classnames',
          'prettier-plugin-merge',
        ],
      },
    },

    {
      files: ['*.{css,scss,sass,less,styl}'], // 样式文件
      options: {
        printWidth: 100,
        tabWidth: 2,
        singleQuote: true, // CSS 字符串使用单引号
      },
    },

    {
      files: ['*.{html,htm}'], // HTML 文件
      options: {
        parser: 'html', // 使用 HTML 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: false, // HTML 属性使用双引号
        htmlWhitespaceSensitivity: 'css', // HTML 空格敏感度
        bracketSameLine: false, // 标签的 > 不与属性同行

        plugins: [
          'prettier-plugin-tailwindcss',
          'prettier-plugin-classnames',
          'prettier-plugin-merge',
        ],
      },
    },

    // ------------------------------------------------------------
    // 后端相关文件
    // ------------------------------------------------------------
    {
      files: ['*.java'], // Java 文件
      options: {
        printWidth: 120,
        tabWidth: 4,
        parser: 'java', // 使用 Java 解析器
        plugins: ['prettier-plugin-java'],
      },
    },

    {
      files: ['*.xml'], // XML 文件（包括 pom.xml）
      options: {
        parser: 'xml', // 使用 XML 解析器
        printWidth: 120,
        tabWidth: 4,
        xmlWhitespaceSensitivity: 'ignore', // XML 空格处理
        xmlSelfClosingSpace: true, // 自闭合标签前加空格 <tag />

        plugins: ['@prettier/plugin-xml'],
      },
    },

    {
      files: ['*.properties'], // Java properties 文件
      options: {
        parser: 'properties', // 使用 properties 解析器
        printWidth: 120,
        tabWidth: 2,

        plugins: ['prettier-plugin-properties'],
      },
    },

    // ------------------------------------------------------------
    // 配置文件
    // ------------------------------------------------------------
    {
      files: ['*.{yml,yaml}'], // YAML 配置文件
      options: {
        parser: 'yaml', // 使用 YAML 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: true, // YAML 字符串使用单引号
        proseWrap: 'preserve', // YAML 注释不自动换行
      },
    },

    {
      files: ['*.json', '*.jsonc'], // JSON 文件
      options: {
        parser: 'json', // 使用 JSON 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: false, // JSON 必须使用双引号
        quoteProps: 'preserve', // 保持原有的属性引号
        trailingComma: 'none', // JSON 不能有尾随逗号
      },
    },

    {
      files: ['*.json5'], // JSON5 文件（支持注释）
      options: {
        parser: 'json5', // 使用 JSON5 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: true, // JSON5 可以用单引号
        quoteProps: 'as-needed', // 属性按需加引号
        trailingComma: 'es5', // JSON5 支持尾随逗号
      },
    },

    {
      files: ['package.json', 'package-lock.json', 'pnpm-lock.yaml'], // 包管理文件特殊处理
      options: {
        parser: 'json-stringify', // 使用特殊的 package.json 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: false, // package.json 必须双引号
        trailingComma: 'none', // package.json 不能有尾随逗号
        plugins: ['prettier-plugin-packagejson'], // 自动排序字段
      },
    },

    // ------------------------------------------------------------
    // 文档文件
    // ------------------------------------------------------------
    {
      files: ['*.{md,mdx,mdc}'], // Markdown 文档
      options: {
        parser: 'markdown', // 使用 Markdown 解析器
        printWidth: 100,
        tabWidth: 4,
        singleQuote: false,
        proseWrap: 'preserve', // 保持 Markdown 原有换行
        embeddedLanguageFormatting: 'auto', // 自动格式化代码块
      },
    },
    {
      files: ['*.{txt,text}'],
      options: {
        printWidth: 100,
        tabWidth: 4,
      },
    },

    // ------------------------------------------------------------
    // 脚本文件
    // ------------------------------------------------------------
    {
      files: ['.env*'], // 环境变量文件
      options: {
        parser: 'sh', // 使用 shell 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: false, // 环境变量值不加引号或用双引号
        plugins: ['prettier-plugin-sh'], // 使用 Shell 插件
      },
    },

    {
      files: ['*.{sh,bash}'], // Shell 脚本
      options: {
        parser: 'sh', // 使用 Shell 解析器
        printWidth: 100,
        tabWidth: 2,
        endOfLine: 'lf', // Shell 必须使用 LF 换行
        keepPadding: false, // 不保留多余的空格
        functionNextLine: false, // 函数括号不换行
        plugins: ['prettier-plugin-sh'],
      },
    },

    {
      files: ['*.{bat,cmd}'], // Windows 批处理
      options: {
        printWidth: 100,
        tabWidth: 2,
        endOfLine: 'crlf', // Windows 脚本使用 CRLF 换行
        parser: 'sh', // 暂用 sh 解析器
      },
    },

    {
      files: ['*.ps1'], // PowerShell 脚本
      options: {
        printWidth: 100,
        tabWidth: 2,
        endOfLine: 'crlf', // PowerShell 使用 CRLF 换行
        parser: 'sh', // 暂用 sh 解析器
      },
    },

    {
      files: ['*.sql'], // SQL 文件
      options: {
        parser: 'sql', // 使用 SQL 解析器
        printWidth: 100,
        tabWidth: 2,
        keywordCase: 'upper', // SQL 关键字大写
        dataTypeCase: 'upper', // SQL 数据类型大写
        functionCase: 'upper', // SQL 函数名大写
        identifierCase: 'preserve', // 标识符保持原样
        plugins: ['prettier-plugin-sql'],
      },
    },

    // ------------------------------------------------------------
    // 构建和工具配置
    // ------------------------------------------------------------
    {
      files: ['Dockerfile*'], // Docker 文件
      options: {
        parser: 'dockerfile', // 使用 Dockerfile 解析器
        printWidth: 100,
        tabWidth: 2,
      },
    },

    {
      files: ['docker-compose*.yml'], // Docker Compose 文件
      options: {
        parser: 'yaml', // 使用 YAML 解析器
        printWidth: 100,
        tabWidth: 2,
        proseWrap: 'preserve', // 保持注释原样
      },
    },

    {
      files: ['*.graphql', '*.gql'], // GraphQL 查询文件
      options: {
        parser: 'graphql', // 使用 GraphQL 解析器
        printWidth: 100,
        tabWidth: 2,
        bracketSpacing: true, // GraphQL 对象括号间加空格
      },
    },

    {
      files: ['tsconfig.json', 'jsconfig.json'], // TypeScript/JavaScript 配置
      options: {
        parser: 'json5', // 支持注释的 JSON5 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: false, // 配置文件必须双引号
        trailingComma: 'none', // 配置文件不能有尾随逗号
      },
    },

    {
      files: ['.prettierrc', '.eslintrc', '.stylelintrc', '.babelrc'], // 工具配置文件
      options: {
        parser: 'json', // 使用 JSON 解析器
        printWidth: 100,
        tabWidth: 2,
        singleQuote: false, // 工具配置使用双引号
        trailingComma: 'none', // 工具配置不能有尾随逗号
      },
    },

    // ------------------------------------------------------------
    // IDE 配置文件
    // ------------------------------------------------------------
    {
      files: ['.idea/**.xml'], // JetBrains IDE 配置
      options: {
        parser: 'xml', // 使用 XML 解析器
        printWidth: 120,
        tabWidth: 2,
      },
    },

    {
      files: ['.vscode/*.json'], // VSCode 配置
      options: {
        parser: 'jsonc', // 支持注释的 JSONC 解析器
        printWidth: 100,
        tabWidth: 2,
      },
    },

    // ------------------------------------------------------------
    // 特殊文档
    // ------------------------------------------------------------
    {
      files: ['LICENSE', 'README', 'CHANGELOG', 'CONTRIBUTING'], // 特殊文档
      options: {
        printWidth: 80,
        proseWrap: 'always', // 重要文档自动换行
      },
    },

    {
      files: ['*.svg'], // SVG 文件
      options: {
        parser: 'html', // 使用 HTML 解析器处理 SVG
        printWidth: 100,
        tabWidth: 2,
      },
    },

    {
      files: ['*.d.ts'], // TypeScript 声明文件
      options: {
        printWidth: 120,
        tabWidth: 2,
        proseWrap: 'preserve', // 保持注释格式
      },
    },

    {
      files: ['*.{test,spec}.{js,jsx,ts,tsx}'], // 测试文件
      options: {
        printWidth: 100,
        tabWidth: 2,
      },
    },
  ],
};
